
const u = navigator.userAgent;
const lowU = u.toLowerCase();
// android终端
const isAndroid = ~lowU.indexOf('android') || ~lowU.indexOf('adr');
// ios终端
const isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/);
// 微信
const isWechat = ~lowU.indexOf('micromessenger') || ~lowU.indexOf('wechat') || ~lowU.indexOf('weixin');

/**
 * 多媒体配置参数说明
 * deviceId: 指定设备ID。
 * width,height:分辨率 - 用于摄像头
 * facingMode: ‘user’ , ‘environment’ 前后置摄像头。
 * sampleRate：指定采样率。
 * sampleSize：每个采样点大小的位数
 * volume：从0（静音）到1（最大）取值
 * echoCancellation：是否使用回声消除来尝试去除通过麦克风回传到扬声器的音频
 * autoGainControl：是否要修改麦克风的输入音量
 * noiseSuppression：是否尝试去除音频信号中的背景噪声
 * latency：以秒为单位，控制开始处理声音和下一步可以使用数据之间的时间，不是很确定为什么要设更高的延迟，但是音频编解码器的延时确实有所不同。
 * channelCount：规定了单声道的时候为1，立体声的时候为2。
 */
// 默认调起后置摄像头配置
const envMedia = {
    audio: false,
    video: {
        facingMode: "environment"
    }
}

// 默认调起前置摄像头配置
const faceMedia = {
    audio: false,
    video: {
        deviceId: 'default',
        facingMode: "user"
    }
}

export default {
    isiOS,
    isAndroid,
    isWechat,
    /**
     * 获取多拍照的配置参数
     * @param {string} cameraType 摄像头类型, environment - 后置摄像头，user - 前置摄像头 
     * @param {boolean} needAudio 是否需要录音
     * @returns 
     */
    getVideoConstrains: function (cameraType) {

        let constrains = cameraType == 'environment' ? envMedia : faceMedia;

        return constrains;
    },

    /**
     * 计算video容器宽高
     * @param {*} settings - 视频流分辨率
     */
    getVideoWH: function(settings){

        const W = window.screen.width;
        const H = window.screen.height;

        const streamW = settings.width;
        const streamH = settings.height;

        let h = streamH * W / streamW;
        return {height: h, width: W};
    },

    /**
     * 获取录音配置参数
     * @returns 
     */
    getAudioConstrains: function () {
        return {
            audio: {
                channelCount: 1,
                volume: 1,
                echoCancellation: true,
                noiseSuppression: true
            },
            video: false,
        }
    },

    getXYRatio(video) {
        // videoHeight为video 真实高度
        // offsetHeight为video css高度
        const { videoHeight: vh, videoWidth: vw, offsetHeight: oh, offsetWidth: ow } = video;
        return {
            yRatio: height => {
                return (vh / oh) * height;
            },
            xRatio: width => {
                return (vw / ow) * width;
            },
        };
    }
}